Braden GanetskyPuzzle Designer · Software Developer · Public Speaker
About Me
Hey! I'm Braden, and I love to make things. Working in C++ Development, with a Mechanical Engineering degree. Come take a look around and check out my projects!
All my puzzles and mechanical toys are available for purchase. If you like my work and you want something unique, I do commissions for a fee.
Contact me if you are interested in producing my designs or for any inquiries.
The CaTSuP is the first ever corner-turning square pyramid, which is where the name comes from. Arguably, this puzzle only has 12 pieces that can be scrambed, but it's very difficult to solve, if you're up for the challenge.
The Oct Gears is not actually a puzzle, but it's a lot of fun to play with. This was an exercise in designing conical gears patterned around a sphere completely from scratch. It's a more expensive fidget toy.
The Penta Mixup is what happens when you take the idea of a Mixup Cube and apply it onto a Pentagonal Prism. Pieces get switched in unexpected ways! This is the 1st puzzle in the "Penta Mixup" series of puzzles.
The Weird Skewb is like a regular Skewb, except two corner pieces can be swapped. Most people who try a regular Skewb imagine swapping the corners, and this puzzle makes it a reality!
The Persistence of Mastery (aka "POM4") is the result of doing an axis transformation on a Crazy 4x4x4 II. After only a few turns, the shape gets extremely confusing, and the solve experience is anything but straightforward!
The Psycho Psatellite is similar to the Crazy Comet, but with the concept applied to the pentagonal icositetrahedron shape. The puzzle can be assembled in the left-handed or right-handed variant, using the exact same pieces!
The Penta Mixup Plus is like the regular Penta Mixup except the equaltorial faces can be turned by 90 degrees. It is similar to Oskar's Illegal Cube but it's more restrictive with no fudging* of the geometry. Featured in the Puzzle Advent Calendar in 2022, it is the 4th puzzle in the "Penta Mixup" series. *Technical term, seriously
The CaTSuP Tree is a hybrid puzzle of a CaTSuP with a 1x2x2. It has a more complicated external shape so that it can resemble a conifer, and then it is coloured with 4 shades of green on its triangular faces. This puzzle is featured in the Puzzle Advent Calendar in 2025.
As my first technical talk, I wanted to talk about another first: Finding my first C++ compiler bug. This C++Now 2023 lightning talk shows a peculiar MSVC bug where data is available at compile time, but is zeroed out at run time. It showcases my "tok3n" parser combinator library.
This online talk shows the things you can do with the Boost.Describe library, an amazing C++ library that gives you static reflection with minimal syntax overhead. See how you can use Describe in your code today! (official docs)
Help! My Expression Template Type Names are Too Long!
Even the name of this talk is too long! If we're ever working with expression templates, we can easily make type names long enough to slow down compilation time. Suddenly our "zero-overhead" expression templates start giving a large compile time overhead. I'll show off a C++20 trick to fix this problem.
"Bask3twork" is a program that procedurally generates Celtic knots in a square grid using any subset of D4 symmetry, that of a square, including no symmetry at all. The secret? A font! The font's glyphs can be mixed, matched, and assembled to your heart's content. However, instead of creating Celtic knots manually, we can sit back and watch Bask3twork generate infinite possibilities.
Unit Testing an Expression Template Library in C++20
Expression templates are one of the wonders that set C++ apart from all other programming languages. Using just the C++ type system, we can store arbitrary information in a type, giving us a way to calculate anything at compile-time. As years have gone by, we now have new ways of expressing compile-time computation, removing the need for relics of the past like expression templates. However, for some of us, expression templates remain a fascination, bordering on obsession.
Regardless of the paradigm, unit testing code at compile-time is no trivial matter. In very rare cases, a compiler's output can vary between compile-time and run-time, given identical source code. Therefore, in order to properly unit test a library meant for compile-time computation, we must run compile-time tests.
This talk will use an expression template parser combinator library as a case study to delve into the world of compile-time testing. Triggering a conditional miscompile is easy, but we all know that C++ compiler output can get notoriously unruly upon hitting errors. Therefore, we will explore ways to attain as much readability as possible in our diagnostics and error messages. Throughout the talk, we will contrast the popular unit testing libraries' solutions to compile-time testing, and we will learn which features are left to be desired. We will push the language to its limits to achieve the most user-friendly error messages we can get, while looking back on how far C++ has come in terms of compile-time programming. Ultimately, we will end up where all C++ users eventually stand: wanting more features out of the language. We will end with a roadmap of sorts, showing which future versions of C++ are slated to render our compile-time testing much simpler and more expressive than we can achieve today, and which desired features have yet to commence the standardization pipeline.
Have you ever wanted to constrain a function template? How about failing compilation with a custom diagnostic message inside your function template? Is it possible to do both?
I want to have my cake and eat it too. Let's try to tackle this problem and see how far we get.
I'm always thinking about the user experience. And this is certainly a user experience. Brainplus is an expression template parser combinator c++ library using minimal syntax. It uses "plus" and "+", and that's a plus!
Can we replace everything in our code with lambdas? Is it possible to write an entire useful application using only lambdas? Let's lambda all the things!
This talk will go through parts of the C++ standard library and try to use lambdas to replace it all. The type traits, a class with data members, and so much more. Let's pinpoint the minimum number of classes and functions required in C++23, using lambdas wherever else we can. Can we emulate everything in C++ using only lambdas? Come to this talk and find out!
Lambdas are a feature we have all grown to understand since C++11. Unfortunately, they keep getting worse and worse. They come with a lot of baggage and they hinder the developer experience. Come to this talk to learn why we should lambda none of the things.
All the way since C++98, we have already had pattern matching in C++! It's limited to specific places, but it's there. Template argument deduction, function overload resolution, and class template specializations are all instances of pattern matching in the C++ language, dating all the way back to the original standard.
The C++11 additions to the language also require library constructs to help deal with type deduction in forwarding references, namely std::forward, among others. Even experienced C++ developers may run into unexpected situations using it, especially in newer scenarios like concepts from C++20. This talk will lay clear the rules of forwarding and std::forward, and how you can forward your arguments properly every time.
This interactive talk is a deep dive into template argument deduction, helping you to understand it at deeper level across all of C++'s lifespan. Almost all that applies in C++98 still applies today, so a foundational understanding is important. Additionally, newer language standards have introduced further wrinkles, like C++11's move semantics and variadic template parameters, as well as C++17's class template argument deduction. By the end of this talk, you will have a solid understanding of how C++ deduces the types used in your code.
What happens if, say, you need to link against OpenSSL version 1.0 but you only have OpenSSL 3 installed? You can install things on your own machine, but not on everyone else's machine. You can change the pre-compiled binaries, so you need to make it work. You're sandboxed enough that it isn't really a security vulnerability, even though it feels like one. Sometimes this is necessary. Let's see what it takes to make it work.
PartStacker is a beloved piece of software in a niche online community. It performs 3D bin packing for the purpose of lowering 3D printing costs. PartStacker program had not been updated since 2013, so Braden took up the mantle of maintenance in 2025. It wasn't an easy journey, including recovering lost features by decompilation, rewriting the application in C++ from scratch, and wrestling with package management. This lightning talk tells the story.
Working with C++ code can be difficult, and it's made even more difficult when the code isn't your own. Everyone agrees that documentation is necessary when sharing a library. But, as a user of a library, the documentation may not help when you want to know the current state of your program. If you're a veteran C++ programmer then you may easily find your way around memory readouts, putting print statements in exactly the right spots, or reading "between the lines" of the documentation. Some of us are not very experienced, or we aren't able to recompile the code with print statements, or the documentation may not help with the problem. Hopefully, the author had written an extension to connect their code to your debugger of choice. But odds are, they didn't. Debuggers are advanced tools, often overlooked when discussing the day-to-day aspects of writing C++ code. Without modifying the source code or recompiling, we can glean large amounts of information about the program state through our debugger. As library writers, or as people writing classes for others to use and reuse, we can and should be writing debugger visualizers. We can empower our users by lowering the barrier to using the library successfully.
This talk will outline how to make the most out of debuggers like the Visual Studio debugger and GDB. Briefly touching on the of how to start up the debugger, this talk will cover topics like automating and scripting the debugger, and writing custom visualizations like Visual Studio Natvis and GDB pretty-printers. This talk is here for you to get started with writing debugger visualizers. Let's make our libraries more accessible. Software is about more than just the source code.
I made a puzzle simulator with the Pygame library in 2017/2018, complete with from-scratch 3D graphics, turning animations, and custom puzzles. It is very simple to use, but specifying a new puzzle file is a pain. I am slowly working on a new simulator in C++ with more lenient rules on which puzzles can be simulated.
After my puzzle simulator in Pygame, I started working on my new puzzle simulator in C++. I wanted to mathematically represent a sticker's non-polygonal edge as its true intended shape instead of storing it as a long list of very small straight lines. I wrote this paper to document the math on how to parametrize these curves uniformly.
This is the first step in making my vision of this simulator into a reality!
bask3twork is an application made using wxWidgets and Daniel Isdell's Celtic Knot Font, to randomly generate Celtic knots. It is still in its early stage with more features being added soon. Portions of the knot can be edited and locked for editing, so you can make it exactly how you want!
tok3n is a C++ library full of parser combinators, with the aim of creating custom parsers with simple syntax. This library is usable in C++20 and above. Examples can be found in the GitHub repo.
A tool to pack 3D mesh files into a minimal bounding box. A community rewrite of Tom van der Zanden's beloved "PartStacker". Developed cross-platform in C++ with wxWidgets and OpenGL.